package org.charging_protocol_switch;

import androidx.activity.result.ActivityResultLauncher;
import androidx.activity.result.contract.ActivityResultContracts;
import androidx.appcompat.app.AppCompatActivity;

import android.content.Intent;
import android.net.Uri;
import android.os.Build;
import android.os.Bundle;
import android.os.Environment;
import android.provider.Settings;
import android.view.View;
import android.widget.TextView;
import android.widget.Toast;

import java.io.DataOutputStream;
import java.io.File;
import java.io.IOException;

public class MainActivity extends AppCompatActivity {

    private ActivityResultLauncher<Intent> allFilesAccessLauncher;

    Process process;
    DataOutputStream os;


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        //获取root权限
        try {
            process = Runtime.getRuntime().exec("su");
            if (process.getOutputStream() != null) {
                os = new DataOutputStream(process.getOutputStream());
            }
        } catch (IOException e) {
            //获取root失败直接退出
            finish();
            throw new RuntimeException(e);
        }

        //获取文件读写权限
        // 初始化所有文件访问权限启动器
        allFilesAccessLauncher = registerForActivityResult(
                new ActivityResultContracts.StartActivityForResult(),
                result -> {
                    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.R) {
                        if (Environment.isExternalStorageManager()) {
                            Toast.makeText(this, "所有文件访问权限已授予", Toast.LENGTH_SHORT).show();
                        } else {
                            Toast.makeText(this, "所有文件访问权限被拒绝", Toast.LENGTH_SHORT).show();
                        }
                    }
                }
        );
        //检查是否授予所有文件访问权限
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.R) {
            if (!Environment.isExternalStorageManager()) {
                //未授予所有文件访问权限
                requestAllFilesAccess();
            }
        }


        //检查当前充电协议
        //文件路径
        String filePath = "/storage/emulated/0/Android/charge_public_version_pps_enable";
        //检查文件是否存在
        if (new File(filePath).exists()) {
            //文件存在
            //设置状态文本
            ((TextView) findViewById(R.id.protocol_flag)).setText("当前充电协议：PPS");
            //禁用PPS按钮
            findViewById(R.id.pps_button).setEnabled(false);
        } else {
            //文件不存在
            //设置状态文本
            ((TextView) findViewById(R.id.protocol_flag)).setText("当前充电协议：MIPPS");
            //禁用MIPPS按钮
            findViewById(R.id.mipps_button).setEnabled(false);

        }

    }

    public void MIPPS_switch(View view) {
        //文件路径
        String filePath = "/storage/emulated/0/Android/charge_public_version_pps_enable";
        //检查文件是否存在
        if (new File(filePath).exists()) {
            //文件存在
            //删除文件
            if (new File(filePath).delete()) {
                //删除成功
                //设置状态文本
                ((TextView) findViewById(R.id.protocol_flag)).setText("当前充电协议：MIPPS");
                //禁用MIPPS按钮
                findViewById(R.id.mipps_button).setEnabled(false);
                //启用PPS按钮
                findViewById(R.id.pps_button).setEnabled(true);

                try {
                    os.writeBytes("echo 0 > /sys/class/qcom-battery/pd_verifed\n");
                    os.flush();

                } catch (IOException e) {
                    //获取root失败直接退出
                    finish();
                    throw new RuntimeException(e);
                }


            } else {
                //删除失败
                Toast.makeText(this, "切换失败", Toast.LENGTH_SHORT).show();
            }
        }
    }

    public void PPS_switch(View view) {
        //文件路径
        String filePath = "/storage/emulated/0/Android/charge_public_version_pps_enable";
        //检查文件是否存在
        if (!new File(filePath).exists()) {
            //文件不存在
            try {
                //创建文件
                new File(filePath).createNewFile();
                //创建成功
                //设置状态文本
                ((TextView) findViewById(R.id.protocol_flag)).setText("当前充电协议：PPS");
            } catch (IOException e) {
                //创建失败
                Toast.makeText(this, "切换失败", Toast.LENGTH_SHORT).show();
                //设置状态文本
                ((TextView) findViewById(R.id.protocol_flag)).setText("当前充电协议：MIPPS");
            }
        }
        //检查文件是否存在
        if (new File(filePath).exists()) {
            //文件存在
            //禁用PPS按钮
            findViewById(R.id.pps_button).setEnabled(false);
            //启用MIPPS按钮
            findViewById(R.id.mipps_button).setEnabled(true);
            //设置状态文本
            ((TextView) findViewById(R.id.protocol_flag)).setText("当前充电协议：PPS");

            try {
                os.writeBytes("echo 1 > /sys/class/qcom-battery/pd_verifed\n");
                os.flush();
            } catch (IOException e) {
                //获取root失败直接退出
                finish();
                throw new RuntimeException(e);
            }


        } else {
            //文件不存在
            Toast.makeText(this, "切换失败", Toast.LENGTH_SHORT).show();
            //禁用MIPPS按钮
            findViewById(R.id.mipps_button).setEnabled(false);
            //启用PPS按钮
            findViewById(R.id.pps_button).setEnabled(true);
            //设置状态文本
            ((TextView) findViewById(R.id.protocol_flag)).setText("当前充电协议：MIPPS");

            try {
                if (Runtime.getRuntime().exec("su\r\necho 0 > /sys/class/qcom-battery/pd_verifed").getOutputStream() != null) {

                }
            } catch (IOException e) {
                //获取root失败直接退出
                finish();
                throw new RuntimeException(e);
            }


        }

    }

    private void requestAllFilesAccess() {
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.R) {
            if (Environment.isExternalStorageManager()) {
                Toast.makeText(this, "已有所有文件访问权限", Toast.LENGTH_SHORT).show();
                return;
            }

            try {
                Intent intent = new Intent(Settings.ACTION_MANAGE_APP_ALL_FILES_ACCESS_PERMISSION);
                intent.setData(Uri.parse("package:" + getPackageName()));
                allFilesAccessLauncher.launch(intent);
            } catch (Exception e) {
                Intent intent = new Intent(Settings.ACTION_MANAGE_ALL_FILES_ACCESS_PERMISSION);
                allFilesAccessLauncher.launch(intent);
            }
        } else {
            Toast.makeText(this, "Android 13以下不需要此权限", Toast.LENGTH_SHORT).show();
        }
    }


}